package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICustomTemplateFieldDAO;
import org.jsola.hr.dto.CustomTemplateFieldAddDTO;
import org.jsola.hr.dto.CustomTemplateFieldUpdateDTO;
import org.jsola.hr.entity.CustomTemplateFieldDO;
import org.jsola.hr.query.CustomTemplateFieldQuery;
import org.jsola.hr.vo.CustomFieldVO;
import org.jsola.hr.vo.CustomTemplateFieldListVO;
import org.jsola.hr.vo.CustomTemplateFieldVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 自定义模板字段
 *
 * @author zhr
 */
public interface ICustomTemplateFieldService extends IService<ICustomTemplateFieldDAO, CustomTemplateFieldDO> {
    /**
     * 查询所有的员工设置字段和入职模板字段
     *
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 字段集合
     */
    List<String> selectAllEmpFiled(String companyId, TokenUser tokenUser);

    /**
     * 新增自定义模板字段
     *
     * @param customTemplateFieldAddDTO 新增自定义模板字段DTO
     * @param tokenUser                 当前用户
     * @return 自定义模板字段详情信息
     */
    CustomTemplateFieldVO save(CustomTemplateFieldAddDTO customTemplateFieldAddDTO, TokenUser tokenUser);

    /**
     * 批量新增自定义模板字段
     *
     * @param customTemplateFieldAddDTOList 新增自定义模板字段DTO
     * @param tokenUser                     当前用户
     * @return 自定义模板字段详情信息
     */
    List<CustomTemplateFieldVO> batchSave(List<CustomTemplateFieldAddDTO> customTemplateFieldAddDTOList, TokenUser tokenUser);

    /**
     * 批量新增自定义模板字段
     *
     * @param templateId                    模板id
     * @param customTemplateFieldAddDTOList 新增自定义模板字段DTO
     * @param tokenUser                     当前用户
     * @return 自定义模板字段详情信息
     */
    List<CustomTemplateFieldVO> batchSave(String templateId, List<CustomTemplateFieldAddDTO> customTemplateFieldAddDTOList,
                                          TokenUser tokenUser);

    /**
     * 修改自定义模板字段
     *
     * @param customTemplateFieldUpdateDTO 修改自定义模板字段DTO
     * @param tokenUser                    当前用户
     * @return 更新数量
     */
    int update(CustomTemplateFieldUpdateDTO customTemplateFieldUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除自定义模板字段，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser              当前用户
     * @param customTemplateFieldIds 自定义模板字段id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... customTemplateFieldIds);

    /**
     * 根据模板id删除自定义模板字段（逻辑删除）
     *
     * @param templateIdList 模板id
     * @param tokenUser      当前用户
     * @return 删除数量
     */
    int deleteByTemplateIdList(List<String> templateIdList, TokenUser tokenUser);

    /**
     * 根据自定义模板字段id查找
     *
     * @param customTemplateFieldId 自定义模板字段id
     * @param siteId                所属站点id
     * @return 自定义模板字段详情信息
     */
    CustomTemplateFieldVO selectById(String customTemplateFieldId, String siteId);

    /**
     * 查询自定义模板字段
     *
     * @param customTemplateFieldQuery 查询条件
     * @param tokenUser                   所属站点id
     * @return 自定义模板字段列表信息
     */
    List<CustomTemplateFieldListVO> select(CustomTemplateFieldQuery customTemplateFieldQuery, TokenUser tokenUser);

    /**
     * 查询自定义模板字段记录数
     *
     * @param customTemplateFieldQuery 查询条件
     * @param siteId                   所属站点id
     * @return 自定义模板字段记录数
     */
    int selectCount(CustomTemplateFieldQuery customTemplateFieldQuery, String siteId);

    /**
     * 分页查询自定义模板字段
     *
     * @param customTemplateFieldQuery 查询条件
     * @param siteId                   所属站点id
     * @return 自定义模板字段列表信息
     */
    Page<CustomTemplateFieldListVO> selectPage(CustomTemplateFieldQuery customTemplateFieldQuery, String siteId);


    /**
     * 根据自定义模板字段id查找
     *
     * @param customTemplateFieldId 自定义模板字段id
     * @param siteId                所属站点id
     * @return 自定义模板字段
     */
    CustomTemplateFieldDO selectDOById(String customTemplateFieldId, String siteId);

    /**
     * 查询自定义模板字段
     *
     * @param customTemplateFieldQuery 查询条件
     * @param siteId                   所属站点id
     * @return 自定义模板字段列表
     */
    List<CustomTemplateFieldDO> selectDO(CustomTemplateFieldQuery customTemplateFieldQuery, String siteId);

    /**
     * 查询默认
     *
     * @param customTemplateFieldQuery 查询条件
     * @param tokenUser                当前用户
     * @return 自定义模板字段列表
     */
    List<CustomTemplateFieldListVO> listDefaultField(CustomTemplateFieldQuery customTemplateFieldQuery, TokenUser tokenUser);

    /**
     * 查询默认+自定义字段
     *
     * @param customTemplateFieldQuery 查询条件
     * @param tokenUser                当前用户
     * @return 自定义模板字段列表
     */
    CustomFieldVO listDefaultAndAdditionalField(CustomTemplateFieldQuery customTemplateFieldQuery, TokenUser tokenUser);

    /**
     * 根据模板id查询字段（排序）
     *
     * @param templateId 模板id
     * @return 自定义模板字段列表
     */
    List<CustomTemplateFieldVO> listByTemplateId(String templateId, TokenUser tokenUser);

    /**
     * 根据模板id查询字段（排序）
     *
     * @param templateIdList 模板id
     * @return 自定义模板字段列表
     */
    List<CustomTemplateFieldVO> listByTemplateIdList(List<String> templateIdList, TokenUser tokenUser);

    /**
     * 根据模板id查询字段（排序）
     *
     * @param templateIdList 模板id
     * @return 自定义模板字段列表
     */
    List<CustomTemplateFieldDO> listDOByTemplateIdList(List<String> templateIdList);


    /**
     * 查询租户级模板左侧可选字段
     *
     * @param moduleCode 模块
     * @param fieldName  字段名称模糊查询 为空查全部
     * @param tokenUser  登录用户
     * @return 租户可选字段
     */
    List<CustomTemplateFieldDO> selectByDefaultModuleCode(String moduleCode, String fieldName, TokenUser tokenUser);

    /**
     * 创建默认字段
     *
     * @return 数量
     */
    List<CustomTemplateFieldVO> createDefaultField();

    /**
     * 查询系统字段+自定义字段
     *
     * @param customTemplateFieldQuery 查询对象
     * @param tokenUser                当前用户
     * @return 字段展示对象
     */
    CustomFieldVO selectAllField(CustomTemplateFieldQuery customTemplateFieldQuery, TokenUser tokenUser);


}


